/**
 * Created by Yu Jin Xian on 2016/11/29.
 */
var handlebars = require('express3-handlebars').create({defaultLayout: 'main'});
var express = require('express');
var app = express();
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');

// 示例1 基本用法
app.get('/about', function (req, res) {
    res.render('about');
});

// 示例2 200以内外的响应代码
app.get('/error', function (req, res) {
    res.status(500);
    res.render('error');

    function or() {
        res.status(500).render('error');
    }
});

// 示例3 将上下文传递给视图, 包含查询字符串、cookie 和 session 值
app.get('/greeting', function (req, res) {
    res.render('greeting', {
        message: 'welcome',
        style: req.query.style,
        userid: req.cookie.userid,
        username: req.session.username
    });
});

// 示例4 没有布局的视图渲染
// 下面的 layout 没有布局文件, 即views/no-layout.handlebars
// 必须包含必要的 HTML
app.get('/no-layout', function (req, res) {
    res.render('no-layout', {layout: null});
});


// 示例5 使用定制渲染视图
// 使用布局文件 views/layouts/custom.handlebars
app.get('/custom-layout', function (req, res) {
    res.render('/custom-layout', {layout: 'custom'});
});

// 示例6 渲染纯文本输出
app.get('/text', function (req, res) {
    res.type('text/plain');
    res.end('this is a test');
});

/**
 * 示例7 添加错误处理程序
 * 这应该出现在所有路由方法的结尾
 * 需要注意的是, 即使你不需要一个 "下一步" 方法
 * 它也必须包含, 以便 Express 将它识别为一个错误处理程序
 */
app.use(function (err, req, res, next) {
    console.error(err.stack);
    res.status(500).render('error', {err: err});
});

// 示例8 添加一个 404 处理程序
// 这应该出现在所有路由方法的结尾
app.use(function (req, res) {
    res.status(404).render('not-found', res);
});

app.listen(3000, function () {
    console.log('http://localhost:3000');
});